package ${package_dao};
import ${package_pojo}.${Table}${pojoSuffix};
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * @Author huanmin
 */
@Mapper
public interface ${Table}Dao {


    /***
     * 查询${TableName}表的总条数
     * @return Integer
     */
    Integer select${Table}Count();

    /***
     * 查询${TableName}表的全部数据
     * @return List<${Table}${pojoSuffix}>
     */
    List<${Table}${pojoSuffix}> select${Table}s();

    /***
     * 查询${TableName}表的主键id对应的值
     * @return ${Table}${pojoSuffix}
     */
    ${Table}${pojoSuffix}  select${Table}ById(@Param("${mapId["o_id"]}") Integer ${mapId["o_id"]} );

    /***
     * 查询${TableName}表的指定条件(${Table}${pojoSuffix})的值 (包含: 自定义排序 ,自定义分页)
     * @return List<${Table}${pojoSuffix}>
     */
    List<${Table}${pojoSuffix}> select${Table}By${Table}(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 自定义查询${TableName}表的指定值,自定义查询(包含: 自定义列,自定义查询条件 , 自定义分组(分组后的赛选),自定义排序 ,自定义分页)
     * @return List<${Table}${pojoSuffix}>
     */
    List<${Table}${pojoSuffix}> select${Table}ByCustom(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 插入一个${Table}${pojoSuffix}对象的数据到数据库${TableName}表中,`包括` 属性值为null的数据  ,不包括主键因为一般主键都是自动生成的
     * @return Integer
     */
    Integer insert${Table}By${Table}(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 插入一个${Table}${pojoSuffix}对象的数据到数据库${TableName}表中,`不包括` 属性值为null的数据 和 不包括主键因为一般主键都是自动生成的
     * @return Integer
     */
    Integer insert${Table}By${Table}IsNotNull(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 插入一批${Table}${pojoSuffix}对象的数据到数据库${TableName}表中,包括属性值为null的数据  ,不包括主键因为一般主键都是自动生成的
     * @return Integer
     */
    Integer batchInsert${Table}By${Table}(List<${Table}${pojoSuffix}> ${table}${pojoSuffix}s);

    /***
     * 插入一批${Table}${pojoSuffix}对象的数据到数据库${TableName}表中,不包括属性值为null的数据 和 不包括主键因为一般主键都是自动生成的
     * @return Integer
     */
    Integer batchInsert${Table}By${Table}NotNull(List<${Table}${pojoSuffix}> ${table}${pojoSuffix}s);

    /***
     * 根据主键ID修改${TableName}表中,括属性值为null的数据
     * @return Integer
     */
    Integer update${Table}ById(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 根据主键ID修改${TableName}表中,不包括属性值为null的数据
     * @return Integer
     */
    Integer update${Table}ByIdNotNull(${Table}${pojoSuffix} ${table}${pojoSuffix});

    /***
     * 根据主键ID删除${TableName}表中指定数据
     * @return Integer
     */
    Integer delete${Table}ById(@Param("${mapId["o_id"]}") Integer ${mapId["o_id"]});

    /***
     * 批量主键ID删除${TableName}表中指定数据
     * @return Integer
     */
    Integer batchDelete${Table}ById(List<Integer> ${mapId["o_id"]}s);

    /***
     * 清空${TableName}表的数据,主键自增也会重置
     * @return Integer
     */
    Integer clear${Table}All();

}
